import type { AxiosRequestConfig } from 'axios'

import type { RequestClient } from '../request-client'
import type { RequestResponse } from '../types'

class FileDownloader {
  private client: RequestClient

  constructor(client: RequestClient) {
    this.client = client
  }

  public async download(
    url: string,
    config?: AxiosRequestConfig,
  ): Promise<RequestResponse<Blob>> {
    const finalConfig: AxiosRequestConfig = {
      ...config,
      responseType: 'blob',
    }

    const response = await this.client.get<RequestResponse<Blob>>(
      url,
      finalConfig,
    )

    return response
  }
}

export { FileDownloader }
